1. Technical Field
The present invention relates to an improved data processing system and, in particular, to a method and apparatus for optimizing performance in a data processing system. Still more particularly, the present invention provides a method and apparatus for a software program development tool for enhancing performance of a software program through software profiling.
2. Description of Related Art
In analyzing and enhancing performance of a data processing system and the applications executing within the data processing system, it is helpful to know which software modules within a data processing system are using system resources. Effective management and enhancement of data processing systems requires knowing how and when various system resources are being used. Performance tools are used to monitor and examine a data processing system to determine resource consumption as various software applications are executing within the data processing system. For example, a performance tool may identify the most frequently executed modules and instructions in a data processing system, or may identify those modules which allocate the largest amount of memory or perform the most I/O requests. Hardware performance tools may be built into the system or added at a later point in time. Software performance tools also are useful in data processing systems, such as personal computer systems, which typically do not contain many, if any, built-in hardware performance tools.
One known software performance tool is a trace tool. A trace tool may use more than one technique to provide trace information that indicates execution flows for an executing program. One technique keeps track of particular sequences of instructions by logging certain events as they occur, so-called event-based profiling technique. For example, a trace tool may log every entry into, and every exit from, a module, subroutine, method, function, or system component. Alternately, a trace tool may log the requester and the amounts of memory allocated for each memory allocation request. Typically, a time-stamped record is produced for each such event. Corresponding pairs of records similar to entry-exit records also are used to trace execution of arbitrary code segments, starting and completing I/O or data transmission, and for many other events of interest.
In order to improve performance of code generated by various families of computers, it is often necessary to determine where time is being spent by the processor in executing code, such efforts being commonly known in the computer processing arts as locating xe2x80x9chot spots.xe2x80x9d Ideally, one would like to isolate such hot spots at the instruction and/or source line of code level in order to focus attention on areas which might benefit most from improvements to the code.
Another trace technique involves program sampling to identify certain locations in programs in which the programs appear to spend large amounts of time. This technique is based on the idea of interrupting the application or data processing system execution at regular intervals, so-called sample-based profiling. At each interruption, the program counter of the currently executing thread, a process that is part of a larger process or program, is recorded. Typically, these tools capture values that are resolved against a load map and symbol table information for the data processing system at post-processing time, and a profile of where the time is being spent is obtained from this analysis.
For example, isolating such hot spots to the instruction level permits compiler writers to find significant areas of suboptimal code generation, at which they may focus their efforts to improve code generation efficiency. Another potential use of instruction level detail is to provide guidance to the designer of future systems. Such designers employ profiling tools to find characteristic code sequences and/or single instructions that require optimization for the available software for a given type of hardware.
There are often costs associated with measuring a system in that the measurement itself perturbs the system. This effect is well understood in the study of elementary particle physics and is known as the Heisenberg uncertainty principle. With software tracing, the cost associated with the tracing can severely affect the system being profiled. The effect can range from disruption of the cache and the instruction pipeline to more mundane effects such as the overhead associated with the tracing.
One effect that may be measured is the overhead associated with the execution of instrumentation code within the execution flows of the application program. As the application program executes, the instrumentation may incur significant overhead in the form of calls to obtain system information, such as a call to obtain a current timestamp.
Therefore, it would be particularly advantageous to provide a method and system for determining the amount of instrumentation overhead incurred during the profiling of a program and for compensating for the overhead during post-processing.
A method and system for compensating for instrumentation overhead in trace data by computing average minimum event times is provided. In order to profile a program, the program is executed to generate trace records that are written to a trace file. A set of trace event records are processed, and the trace events are represented as one or more nodes in a tree data structure. One or more performance statistics are stored at each node in the tree data structure, and a performance statistic at each node is processed to determine an overhead compensation value. The overhead compensation value is determined by computing a local overhead value for each node in the tree data structure. The total execution time of a routine corresponding to the event represented by the node is retrieved, and the local overhead value is computed as the average of the execution time over the number of calls to the routine and the number of calls from the routine to other routines. The minimum of all of the local overhead values is the maximum possible global value used as the overhead compensation value. The overhead compensation value is then applied to the performance statistic at each node.